package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Nota;
import jschool.persistencia.Conexion;

public class ManejadorDeNota {
	private static ManejadorDeNota instancia = null;
	private ArrayList<Nota> notas = null;
	private Conexion conexion = null;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;

	private ManejadorDeNota() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeNota getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeNota();
		}
		return instancia;
	}

	public ArrayList<Nota> getNotas() {
		notas = new ArrayList<Nota>();
		try {
			String sql = "SELECT * FROM notas";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Nota nota = new Nota(rs.getInt(1), rs.getInt(2), rs.getInt(3),
						rs.getInt(4), rs.getInt(5), rs.getInt(6), rs.getInt(7),
						rs.getInt(8), rs.getInt(9), rs.getInt(10), rs
								.getInt(11), rs.getInt(12), rs.getInt(13), rs
								.getInt(14), rs.getInt(15));
				notas.add(nota);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Notas",
					"Error", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return notas;
	}

	public int agregarNota(Nota nota) {
		int fila = 0;
		try {
			String sql = "INSERT INTO nota(idEstudiante, idMateria, evaluacion1,"
					+ " evaluacion2, evaluacion3, evaluacion4, evaluacion5, evaluacion6,"
					+ " evaluacion7, evaluacion8, pruebaPeriodo, calificacionFinPeriodo,"
					+ " promedioFinal, pruebaCompletiva, pruebaExtraordinaria) "
					+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, nota.getIdEstudiante());
			stmt.setInt(2, nota.getIdMateria());
			stmt.setInt(3, nota.getEvaluacion1());
			stmt.setInt(4, nota.getEvaluacion2());
			stmt.setInt(5, nota.getEvaluacion3());
			stmt.setInt(6, nota.getEvaluacion4());
			stmt.setInt(7, nota.getEvaluacion5());
			stmt.setInt(8, nota.getEvaluacion6());
			stmt.setInt(9, nota.getEvaluacion7());
			stmt.setInt(10, nota.getEvaluacion8());
			stmt.setInt(11, nota.getPruebaPeriodo());
			stmt.setInt(12, nota.getCalificacionFinPeriodo());
			stmt.setInt(13, nota.getPromedioFinal());
			stmt.setInt(14, nota.getPruebaCompletiva());
			stmt.setInt(15, nota.getPruebaExtraordinaria());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Estudiantes",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int modificarNota(Nota nota, int id, int idMateria) {
		int fila = 0;
		try {
			String sql = "UPDATE nota SET evaluacion1 = ?, evaluacion2 = ?, evaluacion3 = ?, evaluacion4 = ?, evaluacion5 = ?, evaluacion6 = ?, evaluacion7 = ?, evaluacion8 = ?, pruebaPeriodo = ?, calificacionFinPeriodo = ?, promedioFinal = ?, pruebaCompletiva = ?, pruebaExtraordinaria = ? WHERE (idEstudiante = ? AND idMateria = ?) ";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, nota.getEvaluacion1());
			stmt.setInt(2, nota.getEvaluacion2());
			stmt.setInt(3, nota.getEvaluacion3());
			stmt.setInt(4, nota.getEvaluacion4());
			stmt.setInt(5, nota.getEvaluacion5());
			stmt.setInt(6, nota.getEvaluacion6());
			stmt.setInt(7, nota.getEvaluacion7());
			stmt.setInt(8, nota.getEvaluacion8());
			stmt.setInt(9, nota.getPruebaPeriodo());
			stmt.setInt(10, nota.getCalificacionFinPeriodo());
			stmt.setInt(11, nota.getPromedioFinal());
			stmt.setInt(12, nota.getPruebaCompletiva());
			stmt.setInt(13, nota.getPruebaExtraordinaria());
			stmt.setInt(14, id);
			stmt.setInt(15, idMateria);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Nota",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int eliminarNota(int id, int idMateria) {
		int fila = 0;
		try {
			String sq = "DELETE FROM nota WHERE (idEstudiante = ?, idMateria = ?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sq);
			stmt.setInt(1, id);
			stmt.setInt(2, idMateria);
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Eliminando Nota",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}
}
